// 性能优化配置文件
// 定义应用的性能优化策略、规则和配置项

// 性能监控配置
export const performanceMonitoring = {
  // 是否启用性能监控
  enabled: true,
  
  // 监控间隔（毫秒）
  interval: 1000,
  
  // 性能指标阈值
  thresholds: {
    // 首次内容绘制（FCP）阈值
    fcp: 2000, // 2秒
    
    // 最大内容绘制（LCP）阈值
    lcp: 2500, // 2.5秒
    
    // 首次输入延迟（FID）阈值
    fid: 100, // 100毫秒
    
    // 累积布局偏移（CLS）阈值
    cls: 0.1, // 0.1
    
    // 总阻塞时间（TBT）阈值
    tbt: 200, // 200毫秒
    
    // 内存使用阈值（MB）
    memory: 200, // 200MB
    
    // 帧率阈值（FPS）
    fps: 30 // 30 FPS
  },
  
  // 是否收集详细指标
  detailedMetrics: true,
  
  // 是否在控制台输出性能报告
  consoleReport: false,
  
  // 是否发送性能数据到服务器
  sendToServer: false,
  
  // 性能数据服务器URL
  serverUrl: '/api/performance',
  
  // 批量发送间隔（毫秒）
  batchInterval: 60000 // 1分钟
};

// 资源优化配置
export const resourceOptimization = {
  // 图片优化配置
  images: {
    // 是否启用图片懒加载
    lazyLoading: true,
    
    // 是否启用响应式图片
    responsive: true,
    
    // 图片格式优先顺序
    preferredFormats: ['webp', 'avif', 'jpeg', 'png'],
    
    // 是否启用图片压缩
    compression: true,
    
    // 默认图片质量
    quality: 0.8,
    
    // 图片预加载列表
    preloadImages: []
  },
  
  // 字体优化配置
  fonts: {
    // 是否启用字体显示优化
    fontDisplay: 'swap',
    
    // 字体预加载列表
    preloadFonts: [],
    
    // 是否启用字体子集化
    subsetting: true,
    
    // 是否使用系统字体回退
    systemFallback: true
  },
  
  // 脚本优化配置
  scripts: {
    // 是否启用脚本异步加载
    async: true,
    
    // 是否启用脚本延迟加载
    defer: true,
    
    // 是否内联关键脚本
    inlineCritical: true,
    
    // 是否启用脚本分割
    codeSplitting: true
  },
  
  // 样式优化配置
  styles: {
    // 是否内联关键CSS
    inlineCritical: true,
    
    // 是否启用CSS优化
    optimization: true,
    
    // 是否启用CSS变量缓存
    cssVariablesCaching: true
  },
  
  // 资源预加载配置
  preload: {
    // 是否启用资源预加载
    enabled: true,
    
    // 预加载资源列表
    resources: [
      // { url: '/path/to/resource', type: 'script' },
      // { url: '/path/to/resource', type: 'style' },
      // { url: '/path/to/resource', type: 'image' },
    ],
    
    // 是否基于用户行为预测预加载
    predictive: true
  }
};

// 缓存策略配置
export const cachingStrategy = {
  // 本地存储缓存配置
  localStorage: {
    // 是否启用
    enabled: true,
    
    // 最大缓存大小（MB）
    maxSize: 5,
    
    // 默认过期时间（毫秒）
    defaultExpiry: 3600000, // 1小时
    
    // 清理策略
    cleanupStrategy: 'LRU' // 'LRU' | 'FIFO' | 'TTL'
  },
  
  // 会话存储缓存配置
  sessionStorage: {
    // 是否启用
    enabled: true,
    
    // 最大缓存大小（MB）
    maxSize: 2
  },
  
  // 内存缓存配置
  memoryCache: {
    // 是否启用
    enabled: true,
    
    // 最大缓存条目数
    maxEntries: 100,
    
    // 默认过期时间（毫秒）
    defaultExpiry: 300000, // 5分钟
    
    // 清理策略
    cleanupStrategy: 'LRU'
  },
  
  // API缓存配置
  apiCache: {
    // 是否启用
    enabled: true,
    
    // 缓存时间（毫秒）
    cacheTime: 60000, // 1分钟
    
    // 忽略缓存的API方法
    ignoreMethods: ['POST', 'PUT', 'DELETE', 'PATCH'],
    
    // 强制缓存的API路径
    forceCache: [
      // '/api/static-data'
    ]
  },
  
  // 离线缓存配置
  offlineCache: {
    // 是否启用
    enabled: false,
    
    // 缓存名称
    cacheName: 'starmate-offline',
    
    // 需要缓存的资源
    resources: []
  }
};

// 渲染性能优化配置
export const renderingOptimization = {
  // 是否启用虚拟化列表
  virtualLists: true,
  
  // 列表项阈值
  virtualListThreshold: 50,
  
  // 是否启用组件懒加载
  lazyComponents: true,
  
  // 是否启用组件缓存
  componentCaching: true,
  
  // 是否启用请求优化
  requestOptimization: true,
  
  // 请求节流阈值（毫秒）
  requestThrottleDelay: 300,
  
  // 请求防抖阈值（毫秒）
  requestDebounceDelay: 200,
  
  // 是否启用防抖/节流
  useDebounceThrottle: true,
  
  // 默认防抖延迟（毫秒）
  defaultDebounceDelay: 250,
  
  // 默认节流延迟（毫秒）
  defaultThrottleDelay: 100,
  
  // 是否启用骨架屏
  skeletonScreens: true,
  
  // 是否启用渐进式加载
  progressiveLoading: true
};

// 内存管理配置
export const memoryManagement = {
  // 是否启用内存监控
  enabled: true,
  
  // 是否自动清理内存
  autoCleanup: true,
  
  // 清理间隔（毫秒）
  cleanupInterval: 30000, // 30秒
  
  // 内存压力阈值（MB）
  pressureThreshold: 150,
  
  // 内存压力严重阈值（MB）
  severePressureThreshold: 180,
  
  // 清理策略
  cleanupStrategies: {
    // 是否清理大型对象
    largeObjects: true,
    
    // 是否清理未使用的事件监听器
    unusedListeners: true,
    
    // 是否清理闭包
    closures: true,
    
    // 是否清理DOM引用
    domReferences: true
  }
};

// 启动性能配置
export const startupPerformance = {
  // 是否启用快速启动
  fastBoot: true,
  
  // 是否延迟加载非关键组件
  lazyLoadNonCritical: true,
  
  // 预加载关键路由
  preloadCriticalRoutes: [
    '/',
    '/login',
    '/dashboard',
    '/learn'
  ],
  
  // 是否启用路由预加载
  routePreloading: true,
  
  // 路由预加载策略
  routePreloadStrategy: 'hover', // 'hover' | 'visible' | 'all'
  
  // 是否启用数据预取
  dataPrefetching: true,
  
  // 首屏渲染优化
  criticalRendering: {
    // 是否启用
    enabled: true,
    
    // 是否内联关键资源
    inlineCritical: true
  }
};

// 网络优化配置
export const networkOptimization = {
  // 是否启用HTTP/2
  http2: true,
  
  // 是否启用压缩
  compression: true,
  
  // 压缩级别
  compressionLevel: 6,
  
  // 是否启用CDN
  useCDN: true,
  
  // CDN基础URL
  cdnBaseUrl: '',
  
  // 是否启用HTTP缓存
  httpCaching: true,
  
  // 默认缓存控制头
  cacheControl: 'public, max-age=31536000, immutable',
  
  // 是否启用请求合并
  requestBatching: true,
  
  // 请求合并延迟（毫秒）
  batchingDelay: 100,
  
  // 是否启用重试机制
  retryMechanism: true,
  
  // 重试配置
  retryConfig: {
    // 最大重试次数
    maxRetries: 3,
    
    // 初始延迟（毫秒）
    initialDelay: 1000,
    
    // 延迟乘数
    delayMultiplier: 2,
    
    // 最大延迟（毫秒）
    maxDelay: 10000,
    
    // 重试的HTTP状态码
    retryableStatusCodes: [408, 429, 500, 502, 503, 504]
  }
};

// 调试配置
export const debugging = {
  // 是否启用性能调试
  enabled: process.env.NODE_ENV !== 'production',
  
  // 是否在控制台显示性能指标
  consoleMetrics: true,
  
  // 是否显示性能标记
  performanceMarks: true,
  
  // 是否记录用户交互性能
  recordInteraction: true,
  
  // 是否导出性能报告
  exportReports: false
};

// 合并所有配置
export const performanceConfig = {
  monitoring: performanceMonitoring,
  resources: resourceOptimization,
  caching: cachingStrategy,
  rendering: renderingOptimization,
  memory: memoryManagement,
  startup: startupPerformance,
  network: networkOptimization,
  debugging: debugging
};

// 根据环境覆盖配置
export const getOptimizedConfig = () => {
  // 基础配置
  const config = { ...performanceConfig };
  
  // 生产环境优化
  if (process.env.NODE_ENV === 'production') {
    // 启用所有优化
    config.monitoring.enabled = true;
    config.monitoring.consoleReport = false;
    config.resources.images.lazyLoading = true;
    config.resources.scripts.async = true;
    config.resources.scripts.defer = true;
    config.caching.enabled = true;
    config.rendering.virtualLists = true;
    config.memory.autoCleanup = true;
    config.startup.fastBoot = true;
    config.debugging.enabled = false;
  } else {
    // 开发环境优化
    config.monitoring.consoleReport = true;
    config.debugging.enabled = true;
  }
  
  return config;
};

// 导出默认配置
export default performanceConfig;